restore lost format options when using positional parameters (#709)
authortsteven4 <13596209+tsteven4@users.noreply.github.com>
Tue, 13 Apr 2021 17:33:53 +0000 (11:33 -0600)
committerGitHub <noreply@github.com>
Tue, 13 Apr 2021 17:33:53 +0000 (11:33 -0600)
* restore format options with positional parameters.

* fix positional test

format.h
main.cc
reference/dg200erase.bin [new file with mode: 0644]
reference/dg200erase.log [new file with mode: 0644]
testo.d/dg100.test
vecs.cc

index 63485383b783f10ee20ba425bea1338f91103b23..229e0062003d56a6d74cca905f7fcc18bead087f 100644 (file)
--- a/format.h
+++ b/format.h
@@ -181,8 +181,18 @@ public:
     name = nm;
   }
 
+  QString get_argstring() const
+  {
+    return argstring;
+  }
+
+  void set_argstring(const QString& string)
+  {
+    argstring = string;
+  }
 private:
   QString name;
+  QString argstring;
 
 protected:
   template <class MyFormat>
diff --git a/main.cc b/main.cc
index 6de61fc2fdee46ab53820f32b4c0896a7e5e3dea..8847115f3e844dfe0533fe6b813030c2870822ea 100644 (file)
--- a/main.cc
+++ b/main.cc
@@ -431,7 +431,7 @@ run(const char* prog_name)
        * When debugging, announce version.
        */
       if (global_opts.debug_level > 0)  {
-        warning("GPSBabel Version: %s \n", gpsbabel_version);
+        warning("GPSBabel Version: %s\n", gpsbabel_version);
         warning(MYNAME ": Compiled with Qt %s for architecture %s\n",
                 QT_VERSION_STR,
                 qPrintable(QSysInfo::buildAbi()));
@@ -535,7 +535,7 @@ run(const char* prog_name)
     }
 
     /* reinitialize xcsv in case two formats that use xcsv were given */
-    (void) Vecs::Instance().find_vec(ivecs->get_name());
+    (void) Vecs::Instance().find_vec(ivecs->get_argstring());
 
     cet_convert_init(ivecs->get_encode(), 1);
 
@@ -548,7 +548,7 @@ run(const char* prog_name)
 
     if (qargs.size() == 2 && ovecs) {
       /* reinitialize xcsv in case two formats that use xcsv were given */
-      (void) Vecs::Instance().find_vec(ovecs->get_name());
+      (void) Vecs::Instance().find_vec(ovecs->get_argstring());
 
       cet_convert_init(ovecs->get_encode(), 1);
 
diff --git a/reference/dg200erase.bin b/reference/dg200erase.bin
new file mode 100644 (file)
index 0000000..7d77e11
Binary files /dev/null and b/reference/dg200erase.bin differ
diff --git a/reference/dg200erase.log b/reference/dg200erase.log
new file mode 100644 (file)
index 0000000..706e2cb
--- /dev/null
@@ -0,0 +1,8 @@
+TX: Frame Start a0 a2 Payload_Len 0003 Cmd: getfileheader
+RX: Start a0a2 Len 0005 Cmd: getfileheader
+found 0 headers, nextheader=0
+no further headers, aborting the loop
+TX: Frame Start a0 a2 Payload_Len 0001 Cmd: getconfig
+RX: Start a0a2 Len 002e Cmd: getconfig
+TX: Frame Start a0 a2 Payload_Len 0003 Cmd: erase
+RX: Start a0a2 Len 0005 Cmd: erase
index 0fa282d04b714460c68c1dc062f32d421531d33e..2aaf382fa52a7b77e65c2997eac402e40bcef33f 100644 (file)
@@ -4,3 +4,9 @@ compare ${REFERENCE}/track/dg100.gpx ${TMPDIR}/dg100.gpx
 
 gpsbabel -i dg-200-bin -f ${REFERENCE}/track/dg200.bin -o gpx -F ${TMPDIR}/dg200.gpx
 compare ${REFERENCE}/track/dg200.gpx ${TMPDIR}/dg200.gpx
+
+# make sure we don't drop the options when the file is provided as a positional parameter
+gpsbabel -D3 -i dg-200-bin,erase -o gpx ${REFERENCE}/dg200erase.bin ${TMPDIR}/dg200erase.gpx 2>${TMPDIR}/dg200erase.log 1>/dev/null
+# Remove messages from main that depend on OS, Qt version, etc.
+grep -v main: <${TMPDIR}/dg200erase.log | grep -v "GPSBabel Version" >${TMPDIR}/dg200erase_clean.log
+compare ${REFERENCE}/dg200erase.log ${TMPDIR}/dg200erase_clean.log
diff --git a/vecs.cc b/vecs.cc
index 263146f8c5ff54444dec0aad5e52a926033856ec..1a91991c7170dbb2b6687d94d8ace61e018f21f5 100644 (file)
--- a/vecs.cc
+++ b/vecs.cc
@@ -272,6 +272,7 @@ Format* Vecs::find_vec(const QString& vecname)
     xcsv_fmt.xcsv_setup_internal_style(nullptr);
 #endif // CSVFMTS_ENABLED
     vec.vec->set_name(vec.name);       /* needed for session information */
+    vec.vec->set_argstring(vecname);  /* needed for positional parameters */
     return vec.vec;
 
   }
@@ -319,6 +320,7 @@ Format* Vecs::find_vec(const QString& vecname)
 #endif // CSVFMTS_ENABLED
 
     vec_list[0].vec->set_name(svec.name);      /* needed for session information */
+    vec_list[0].vec->set_argstring(vecname);  /* needed for positional parameters */
     return vec_list[0].vec;
   }